#Boa:Frame:relatorioFrame

import wx
import wx.grid
from BancoDeDados import *
bd = BancoDeDados()
def create(parent):
    return relatorioFrame(parent)

[wxID_RELATORIOFRAME, wxID_RELATORIOFRAMEGRID1, 
] = [wx.NewId() for _init_ctrls in range(2)]

class relatorioFrame(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_RELATORIOFRAME, name='relatorioFrame',
              parent=prnt, pos=wx.Point(456, 298), size=wx.Size(824, 252),
              style=wx.DEFAULT_FRAME_STYLE, title='Relat\xf3rio')
        self.SetClientSize(wx.Size(808, 214))
        self.Center(wx.BOTH)
        self.Bind(wx.EVT_ACTIVATE, self.OnFrame1Activate)

        self.grid1 = wx.grid.Grid(id=wxID_RELATORIOFRAMEGRID1, name='grid1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(808, 214), style=0)
        self.grid1.Center(wx.VERTICAL)
        self.grid1.SetAutoLayout(True)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnFrame1Activate(self, event):
        self.limiteConvenio = 0
        self.linhas_relatorio = 0
        # under events pick FrameEvent and then wx.EVT_ACTIVATE
        # now you can add your own code here and still have the use
        # of <strong class="highlight">BOA</strong>'s Frame Designer
        #
        # give <strong class="highlight">grid</strong> 8 rows and 5 columns
        self.grid1.CreateGrid(15, 5)

        # you can als add some simple cell formatting
        self.grid1.SetColSize(0, 300)
        self.grid1.SetColSize(1, 100)
        self.grid1.SetColSize(2, 100)
        self.grid1.SetColSize(3, 100)
        self.grid1.SetColSize(4, 100)
        
        self.grid1.SetRowSize(0, 25)

        self.grid1.SetCellValue(0, 0, "                       Fonte de Renda")
        self.grid1.SetCellValue(0, 1, " Receita R$")
        self.grid1.SetCellValue(0, 2, "  Receita %")
        self.grid1.SetCellValue(0, 3, "Tempo/Horas")
        self.grid1.SetCellValue(0, 4, "Ticket Medio")
        self.grid1.SetCellFont(0, 0, wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD))
        self.grid1.SetCellFont(0, 1, wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD))
        self.grid1.SetCellFont(0, 2, wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD))
        self.grid1.SetCellFont(0, 3, wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD))
        self.grid1.SetCellFont(0, 4, wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD))
        self.grid1.SetCellBackgroundColour(0, 0, wx.CYAN)
        self.grid1.SetCellBackgroundColour(0, 1, wx.CYAN)        
        self.grid1.SetCellBackgroundColour(0, 2, wx.CYAN)
        self.grid1.SetCellBackgroundColour(0, 3, wx.CYAN)        
        self.grid1.SetCellBackgroundColour(0, 4, wx.CYAN)        
        self.grid1.SetReadOnly(0, 0)
        self.grid1.SetReadOnly(0, 1)
        self.grid1.SetReadOnly(0, 2)
        self.grid1.SetReadOnly(0, 3)
        self.grid1.SetReadOnly(0, 4)



        self.relatorio_nomes_convenio()
        self.retornar_ticktMedio()
        self.relatorio_nomes_profissionais()
        self.retornar_ticktMedio_profissional()



    def dinheiro_total(self):
        listaObj1 = bd.get_objetos_rendaPac()
        listaObj2 = bd.get_objetos_renda()
        valor = 0
        contador = 0
        
        for i in listaObj1:

            valor = valor + i.get_valor()
        for i in listaObj2:

            valor = valor + i.get_valor()
            
        return valor
        
###########FUNCOES DO GRID DE CONVENIOS###############        
            
    def relatorio_nomes_convenio(self):
        lista = bd.get_lista_convenios()
        contador = 0
        for i in lista:
            self.linhas_relatorio = self.linhas_relatorio +1
            contador = contador + 1
            self.grid1.SetCellValue(contador, 0, i)
            self.retornar_valor_convenio(i,contador)
            self.retornar_tempo_convenio(i,contador)
            self.porcentagem_convenio(contador)
        self.limiteConvenio = contador
    def retornar_valor_convenio(self, convenio, contador):
        listaObj = bd.get_objetos_rendaPac()
        valor = 0
        for i in listaObj:
            if convenio == i.get_convenio():
                valor = valor + i.get_valor()
            
            self.grid1.SetCellValue(contador, 1, str(valor))
        
    def retornar_tempo_convenio(self, convenio, contador):
        listaObj = bd.get_objetos_rendaPac()
        tempo = 0
        for i in listaObj:
            if convenio == i.get_convenio():
                tempo = tempo + i.get_tempo()
            
            self.grid1.SetCellValue(contador, 3, str(tempo))

    def retornar_ticktMedio(self):
        listaObj = bd.get_lista_convenios()
        contador = 0
        for i in listaObj:
            contador = contador + 1
            if self.grid1.GetCellValue(contador, 3) != '0':
                ticketMedio = float(self.grid1.GetCellValue(contador, 1))/ float(self.grid1.GetCellValue(contador, 3))
                self.grid1.SetCellValue(contador, 4, str(ticketMedio))
            else: self.grid1.SetCellValue(contador, 4, '0')

    def porcentagem_convenio(self, contador):
        porcentagem = (float(self.grid1.GetCellValue(contador, 1))/ self.dinheiro_total())*100
        self.grid1.SetCellValue(contador, 2, str(porcentagem))            
        
        

###########FUNCOES DO GRID DE PROFISSIONAIS###############

    def relatorio_nomes_profissionais(self):
        lista = bd.listar_profissionais()
        contador = self.limiteConvenio + 1
        for i in lista:
            self.linhas_relatorio = self.linhas_relatorio + 1
            contador = contador + 1
            self.grid1.SetCellValue(contador, 0, i)
            self.retornar_valor_profissional(i, contador)
            self.retornar_tempo_profissional(i, contador)
            self.porcentagem_profissional(contador)
    def retornar_valor_profissional(self, profissional, contador):
        listaObj = bd.get_objetos_renda()
        valor = 0
        for i in listaObj:
            if profissional == i.get_nome():
                valor = valor + i.get_valor()
            
            self.grid1.SetCellValue(contador, 1, str(valor))

    def retornar_tempo_profissional(self, profissional, contador):
        listaObj = bd.get_objetos_renda()
        tempo = 0
        for i in listaObj:
            if profissional == i.get_nome():
                tempo = tempo + i.get_tempo()
            
            self.grid1.SetCellValue(contador, 3, str(tempo))

    def retornar_ticktMedio_profissional(self):
        listaObj = bd.get_objetos_renda()
        contador = self.limiteConvenio + 1
        for i in listaObj:
            contador = contador + 1
            if self.grid1.GetCellValue(contador, 3) != '0':
                ticketMedio = float(self.grid1.GetCellValue(contador, 1))/ float(self.grid1.GetCellValue(contador, 3))
                self.grid1.SetCellValue(contador, 4, str(ticketMedio))
            else: self.grid1.SetCellValue(contador, 4, '0')
            
    def porcentagem_profissional(self, contador):
        porcentagem = (float(self.grid1.GetCellValue(contador, 1))/ self.dinheiro_total())*100
        self.grid1.SetCellValue(contador, 2, str(porcentagem))              
        
#        self.grid1.SetCellValue(1, 1, "Another ")
#        self.grid1.SetCellValue(2, 2, "Yet another cell")
#        self.grid1.SetCellValue(3, 3, "This cell is read-only")
#        self.grid1.SetCellTextColour(1, 1, wx.RED)
        


if __name__ == '__main__':
    # use 'Add module runner' in the Edit menu
    # this gives you single source file code
    app = wx.PySimpleApp()
    frame = create(None)
    frame.Show()

    app.MainLoop()
